package Administrador;

import hbt.AlmacenSRV;
import hbt.ProveedorSRV;
import hbt.SRVRodamiento;

import java.rmi.RemoteException;
import java.util.Vector;

import modelo.ItemAlmacen;
import modelo.ItemRemito;
import modelo.OrdenCompra;
import modelo.Proveedor;
import modelo.Remito;
import modelo.Rodamiento;
import ViewObjects.ItemAlmacenView;
import ViewObjects.ItemRemitoView;
import ViewObjects.RemitoView;

public class AdministradorStockRodamientos {

	private Vector<Remito> remito;
	private Vector<Proveedor> proveedores;
	private Vector<Rodamiento> rodamientos;

	public void recepcion_Mercaderia(RemitoView re) throws RemoteException {
		int idProveedor = re.getIdProveedor();
		int idOrdenCompra = re.getIdOrdenCompra();

		Remito remito = new Remito(re.getNroRemito(), re.getFecha());

		for (ItemRemitoView itr : re.getItems()) {
			String codigoFabricante = itr.getRodamiento().getCodigoFabricante();
			Rodamiento rod = buscarRodamiento(codigoFabricante);
			if (rod != null) {
				remito.addItemRemito(rod, itr.getCantidad());
			}
		}

		Proveedor p = buscarProveedor(idProveedor);
		if (p != null) {
			for (OrdenCompra oc : p.getOrdenesCompra()) {
				if (oc.getNroOC() == idOrdenCompra) {
					oc.agregarRemito(remito);
					p.agregarRemito(remito);
					new ProveedorSRV().modificarProveedor(p);

				}
				actualizarAlmacen(remito);
			}
		}
	}

	public Remito buscarRemito(int nroRemito) {
		// TODO Auto-generated method stub
		for (int i = 0; i > remito.size(); i++) {
			if (remito.elementAt(i).getNroRemito() == nroRemito) {
				return remito.elementAt(i);
			} else {
				System.out.println("Error el Remito no existe");
			}
		}
		return null;
	}

	public Rodamiento buscarRodamiento(String codigoFabricante) {
		// TODO Auto-generated method stub
		for (int i = 0; i > rodamientos.size(); i++) {
			if (rodamientos.elementAt(i).getCodigoFabricante() == codigoFabricante) {
				return rodamientos.elementAt(i);
			}
		}
		Rodamiento rod = new SRVRodamiento()
				.consultarRodamiento(codigoFabricante);
		if (rod != null) {
			rodamientos.add(rod);
			return rod;
		}
		return null;
	}

	public Proveedor buscarProveedor(int idProveedor) {
		// TODO Auto-generated method stub
		for (int i = 0; i > proveedores.size(); i++) {
			if (proveedores.elementAt(i).getIdProveedor() == idProveedor) {
				return proveedores.elementAt(i);
			}
		}
		Proveedor p = new ProveedorSRV().consultarProveedor(idProveedor);
		if (p != null) {
			proveedores.add(p);
			return p;
		}
		return null;
	}

	private void actualizarAlmacen(Remito re) {
		// TODO Auto-generated method stub
		float precioPromedio = 20;
		for (ItemRemito itr : re.getItems()) {
			String codigoFabricante = itr.getRodamiento().getCodigoFabricante();
			ItemAlmacen ia = new AlmacenSRV()
					.buscarItemAlmacen(codigoFabricante);
			if (ia != null) {
				ia.setCantStock(ia.getCantStock() + itr.getCantidad());
				ia.setPrecioUnitario(precioPromedio);
				new AlmacenSRV().actualizarItemAlmacen(ia);
			} else {
				ia = new ItemAlmacen(itr.getRodamiento(), itr.getCantidad(),
						precioPromedio);
				new AlmacenSRV().altaItemAlmacen(ia);
			}
		}
	}

	public void baja_stock(int nroOC) {

	}

	public void mod_stock(String rod, int cant, float precioActualizado) {

	}

	public int consultar_stock(String r) {
		return 0;

	}

	public ItemAlmacenView consultar_Stock(String cod) {
		return null;
	}

}
